import $H from '@/common/banmi/request.js';
import $C from '@/common/banmi/config.js';
var CryptoJS = CryptoJS || function(g, l) {
	var e = {},
		d = e.lib = {},
		m = function() {},
		k = d.Base = {
			extend: function(a) {
				m.prototype = this;
				var c = new m;
				a && c.mixIn(a);
				c.hasOwnProperty("init") || (c.init = function() {
					c.$super.init.apply(this, arguments)
				});
				c.init.prototype = c;
				c.$super = this;
				return c
			},
			create: function() {
				var a = this.extend();
				a.init.apply(a, arguments);
				return a
			},
			init: function() {},
			mixIn: function(a) {
				for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
				a.hasOwnProperty("toString") && (this.toString = a.toString)
			},
			clone: function() {
				return this.init.prototype.extend(this)
			}
		},
		p = d.WordArray = k.extend({
			init: function(a, c) {
				a = this.words = a || [];
				this.sigBytes = c != l ? c : 4 * a.length
			},
			toString: function(a) {
				return (a || n).stringify(this)
			},
			concat: function(a) {
				var c = this.words,
					q = a.words,
					f = this.sigBytes;
				a = a.sigBytes;
				this.clamp();
				if (f % 4)
					for (var b = 0; b < a; b++) c[f + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) &
						255) << 24 - 8 * ((f + b) % 4);
				else if (65535 < q.length)
					for (b = 0; b < a; b += 4) c[f + b >>> 2] = q[b >>> 2];
				else c.push.apply(c, q);
				this.sigBytes += a;
				return this
			},
			clamp: function() {
				var a = this.words,
					c = this.sigBytes;
				a[c >>> 2] &= 4294967295 <<
					32 - 8 * (c % 4);
				a.length = g.ceil(c / 4)
			},
			clone: function() {
				var a = k.clone.call(this);
				a.words = this.words.slice(0);
				return a
			},
			random: function(a) {
				for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * g.random() | 0);
				return new p.init(c, a)
			}
		}),
		b = e.enc = {},
		n = b.Hex = {
			stringify: function(a) {
				var c = a.words;
				a = a.sigBytes;
				for (var b = [], f = 0; f < a; f++) {
					var d = c[f >>> 2] >>> 24 - 8 * (f % 4) & 255;
					b.push((d >>> 4).toString(16));
					b.push((d & 15).toString(16))
				}
				return b.join("")
			},
			parse: function(a) {
				for (var c = a.length, b = [], f = 0; f < c; f += 2) b[f >>> 3] |= parseInt(a.substr(f,
					2), 16) << 24 - 4 * (f % 8);
				return new p.init(b, c / 2)
			}
		},
		j = b.Latin1 = {
			stringify: function(a) {
				var c = a.words;
				a = a.sigBytes;
				for (var b = [], f = 0; f < a; f++) b.push(String.fromCharCode(c[f >>> 2] >>> 24 - 8 * (
					f %
					4) & 255));
				return b.join("")
			},
			parse: function(a) {
				for (var c = a.length, b = [], f = 0; f < c; f++) b[f >>> 2] |= (a.charCodeAt(f) &
						255) << 24 -
					8 * (f % 4);
				return new p.init(b, c)
			}
		},
		h = b.Utf8 = {
			stringify: function(a) {
				try {
					return decodeURIComponent(escape(j.stringify(a)))
				} catch (c) {
					throw Error("Malformed UTF-8 data");
				}
			},
			parse: function(a) {
				return j.parse(unescape(encodeURIComponent(a)))
			}
		},
		r = d.BufferedBlockAlgorithm = k.extend({
			reset: function() {
				this._data = new p.init;
				this._nDataBytes = 0
			},
			_append: function(a) {
				"string" == typeof a && (a = h.parse(a));
				this._data.concat(a);
				this._nDataBytes += a.sigBytes
			},
			_process: function(a) {
				var c = this._data,
					b = c.words,
					f = c.sigBytes,
					d = this.blockSize,
					e = f / (4 * d),
					e = a ? g.ceil(e) : g.max((e | 0) - this._minBufferSize, 0);
				a = e * d;
				f = g.min(4 * a, f);
				if (a) {
					for (var k = 0; k < a; k += d) this._doProcessBlock(b, k);
					k = b.splice(0, a);
					c.sigBytes -= f
				}
				return new p.init(k, f)
			},
			clone: function() {
				var a = k.clone.call(this);
				a._data = this._data.clone();
				return a
			},
			_minBufferSize: 0
		});
	d.Hasher = r.extend({
		cfg: k.extend(),
		init: function(a) {
			this.cfg = this.cfg.extend(a);
			this.reset()
		},
		reset: function() {
			r.reset.call(this);
			this._doReset()
		},
		update: function(a) {
			this._append(a);
			this._process();
			return this
		},
		finalize: function(a) {
			a && this._append(a);
			return this._doFinalize()
		},
		blockSize: 16,
		_createHelper: function(a) {
			return function(b, d) {
				return (new a.init(d)).finalize(b)
			}
		},
		_createHmacHelper: function(a) {
			return function(b, d) {
				return (new s.HMAC.init(a,
					d)).finalize(b)
			}
		}
	});
	var s = e.algo = {};
	return e
}(Math);
(function() {
	var g = CryptoJS,
		l = g.lib,
		e = l.WordArray,
		d = l.Hasher,
		m = [],
		l = g.algo.SHA1 = d.extend({
			_doReset: function() {
				this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
			},
			_doProcessBlock: function(d, e) {
				for (var b = this._hash.words, n = b[0], j = b[1], h = b[2], g = b[3], l = b[4], a =
						0; 80 > a; a++) {
					if (16 > a) m[a] = d[e + a] | 0;
					else {
						var c = m[a - 3] ^ m[a - 8] ^ m[a - 14] ^ m[a - 16];
						m[a] = c << 1 | c >>> 31
					}
					c = (n << 5 | n >>> 27) + l + m[a];
					c = 20 > a ? c + ((j & h | ~j & g) + 1518500249) : 40 > a ? c + ((j ^ h ^ g) +
							1859775393) : 60 > a ? c + ((j & h | j & g | h & g) - 1894007588) : c +
						((j ^
							h ^
							g) - 899497514);
					l = g;
					g = h;
					h = j << 30 | j >>> 2;
					j = n;
					n = c
				}
				b[0] = b[0] + n | 0;
				b[1] = b[1] + j | 0;
				b[2] = b[2] + h | 0;
				b[3] = b[3] + g | 0;
				b[4] = b[4] + l | 0
			},
			_doFinalize: function() {
				var d = this._data,
					e = d.words,
					b = 8 * this._nDataBytes,
					g = 8 * d.sigBytes;
				e[g >>> 5] |= 128 << 24 - g % 32;
				e[(g + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296);
				e[(g + 64 >>> 9 << 4) + 15] = b;
				d.sigBytes = 4 * e.length;
				this._process();
				return this._hash
			},
			clone: function() {
				var e = d.clone.call(this);
				e._hash = this._hash.clone();
				return e
			}
		});
	g.SHA1 = d._createHelper(l);
	g.HmacSHA1 = d._createHmacHelper(l)
})();
(function() {
	var g = CryptoJS,
		l = g.enc.Utf8;
	g.algo.HMAC = g.lib.Base.extend({
		init: function(e, d) {
			e = this._hasher = new e.init;
			"string" == typeof d && (d = l.parse(d));
			var g = e.blockSize,
				k = 4 * g;
			d.sigBytes > k && (d = e.finalize(d));
			d.clamp();
			for (var p = this._oKey = d.clone(), b = this._iKey = d.clone(), n = p.words, j = b
					.words,
					h = 0; h < g; h++) n[h] ^= 1549556828, j[h] ^= 909522486;
			p.sigBytes = b.sigBytes = k;
			this.reset()
		},
		reset: function() {
			var e = this._hasher;
			e.reset();
			e.update(this._iKey)
		},
		update: function(e) {
			this._hasher.update(e);
			return this
		},
		finalize: function(e) {
			var d =
				this._hasher;
			e = d.finalize(e);
			d.reset();
			return d.finalize(this._oKey.clone().concat(e))
		}
	})
})();
export default {
	//选择文件
	chooseFile(data = {}) {
		let that = this;
		let platform = uni.getStorageSync('platform')
		return new Promise((resolve, reject) => {
			//qq小程序和微信小程序支付该方法
			if (platform == 'MP-QQ' || platform == 'MP-WEIXIN') {
				wx.chooseMessageFile({
					type: 'all',
					count: 6, //默认100
					extension: ['.doc', '.xls', '.docx', '.xlsx'],
					success(res) {
						that.GetFileRes(res).then(ret => {
							resolve(ret)
						});
					},
					fail(res) {
						resolve(0);
					},
				});
				return;
			}
			if (platform == 'H5') {
				uni.chooseFile({
					count: 5,
					extension: ['.zip', '.doc', '.mp3'],
					success: function(res) {
						that.GetFileRes(res).then(ret => {
							resolve(ret)
						});
						return
					},
					fail(res) {
						resolve(0);
					},
				});
				return
			}
			uni.showToast({
				title: '此环境不支持uni.chooseFile方法',
				icon: 'none'
			})

		});
	},
	// 选择视频
	chooseVideo(data = {}) {
		let that = this;
		return new Promise((resolve, reject) => {
			uni.chooseVideo({
				sourceType: ['camera', 'album'],
				compressed: false,
				success: function(res) {
					console.log(res)
					that.GetFileRes(res, 'video').then(ret => {
						resolve(ret)
					});
				},
				fail(res) {
					console.log("res: " + JSON.stringify(res));
					resolve(0);
				},
			});
		});
	},
	//选择图片
	chooseImage(data = {}) {
		let that = this;

		return new Promise((resolve, reject) => {
			// #ifndef MP-WEIXIN
			console.log("111: " + JSON.stringify(111));
			uni.chooseImage({
				sizeType: ['original'],
				count: 5,
				success: (res) => {


					that.GetFileRes(res, 'image').then(ret => {
						resolve(ret)
					});
				},
				fail(res) {
					console.log("res: " + JSON.stringify(res));
					resolve(0);
				},
			})
			// #endif
			// #ifdef MP-WEIXIN
			uni.chooseMedia({
				count: 5,
				mediaType: ['image'],
				sourceType: ['album', 'camera'],
				maxDuration: 30,
				camera: 'back',
				sizeType: ['original'],
				success(res) {
					that.GetFileRes(res, 'image').then(ret => {
						resolve(ret)
					});
				},
				fail(res) {
					resolve(0);
				},
			})
			// #endif



		});



	},
	GetFileRes(res, fileType) {
		let that = this;
		return new Promise((resolve, reject) => {
			if (fileType == 'video') {
				var tempFilePath = res.name ? res.name : res.tempFilePath
				let suffix = tempFilePath.substr(tempFilePath.lastIndexOf("."));
				suffix = suffix.replace(".", "");

				console.log(res);
				if (suffix == 'video') {
					var tempFile = res.tempFile ? res.tempFile : 'a.mp4';
					tempFile = tempFile.substr(tempFile.lastIndexOf("."));
					suffix = tempFile.replace(".", "");

				}

				var list = [];
				var find = {
					fileType: res.tempFile ? res.tempFile.type : fileType,
					filesize: res.size,
					filename: res.name ? res.name : '',
					suffix: suffix,
					filepath: res.tempFilePath,
					width: res.width,
					height: res.height,
					duration: res.duration,
				}
				list.push(find);
				resolve(list);

			}

			res.tempFiles.forEach((item, index) => {
				console.log(item)
				// #ifdef MP-WEIXIN
				var tempFilePath = item.name ? item.name : item.tempFilePath
				if (fileType) {
					item.filepath = item.tempFilePath;
				} else {
					item.filepath = item.path;
				}




				item.name = tempFilePath.substring(tempFilePath.lastIndexOf('/') + 1);
				// #endif
				// #ifndef MP-WEIXIN
				var tempFilePath = item.name ? item.name : item.path
				item.filepath = item.path;
				// #endif

				if (!item.name) {
					item.name = item.filepath;
				}

				console.log(item);

				item.fileType = item.type ? item.type : fileType;
				item.filesize = item.size;
				item.filename = Date.now() + '_' + index + item.name.substring(item.name
					.lastIndexOf('.'));
				item.suffix = item.name.substr(item.name.lastIndexOf("."));
				item.suffix = item.suffix.replace(".", "");


				item.width = 0;
				item.height = 0;
				item.duration = 0;

				if (fileType == 'image') {

					uni.getImageInfo({
						src: item.filepath,
						success: function(image) {
							console.log("image: " + JSON.stringify(image));

							item.width = image.width;
							item.height = image.height;
							if (item.suffix != 'gif') {
								item.suffix = image.type
							}






							if (index + 1 == res.tempFiles.length) {
								resolve(res.tempFiles);
							}
						},
						fail(ret) {
							if (index + 1 == res.tempFiles.length) {
								resolve(res.tempFiles);
							}
						},
					});
				}
			});

			if (fileType != 'image') {
				resolve(res.tempFiles);
			}


		});




	},

	banmi_upload(request) {
		let that = this;
		let files = request.files;
		this.group_id = request.group_id;
		this.t_type = request.t_type;
		return new Promise((resolve, reject) => {
			let num = files.length;
			let fileList = new Array;
			zenkuai_upload(0);

			function zenkuai_upload(i) {
				let fileData = {
					fileIndex: i,
				};
				that.ajax_upload(files[i], (res) => {
					fileData.url = res.imageURL;
					fileList.push(res.imageURL);
					if (num - 1 > i) {
						zenkuai_upload(i + 1);
					} else {
						resolve(fileList);
					}
				}, (error) => {
					reject(error);
				}, (res) => {

					request.onProgressUpdate && request.onProgressUpdate(
						Object.assign({}, fileData, res));
				});
			}
		});
	},

	ajax_upload(file, success, fail, progress, cancelTask) {

		var video_info = {
			videoWidth: file.width,
			videoHeight: file.height,
			duration: file.duration,
			name: file.filename,
			size: file.filesize,
			type: file.fileType,
			suffix: file.suffix,
			path: file.filepath,
			token: file.token ? file.token : ''
		}



		this.upload_api(file, success, video_info, progress, cancelTask);
	},


	async upload_api(file, success, video_info, progress, cancelTask) {

		let that = this




		if (!video_info.suffix) {
			const get_processing = await this.Image_processing(file.path);
			var Extension = get_processing.suffix;
		} else {
			var Extension = video_info.suffix;
		}

		var video_info1 = {
			'videoWidth': video_info.videoWidth,
			'videoHeight': video_info.videoHeight,
			'duration': video_info.duration,
			'name': video_info.name,
			'size': video_info.size,
			'type': video_info.type,
			'suffix': video_info.suffix,
		};
		that.video_info1 = video_info1

		let data = {
			banmi_Extension: Extension,
			banmi_video_info: JSON.stringify(video_info1),
			banmi_token: video_info.token ? video_info.token : '',

		}



		$H.post('/admin.Upload/upload_api', data).then(ret => {
			if (ret.status == 200) {
				var oss_data = ret.data;
				var oss = Number(oss_data.oss);
				switch (oss) {
					case 0: //本地
						that.fileUpload(file, oss_data, success, video_info, Extension, progress,
							cancelTask);
						break;
					case 1: //七牛
						that.qiniu_oss(file, oss_data, success, progress, cancelTask);
						break;
					case 2: //阿里云
						that.aliyun_oss(file, oss_data, success, progress, cancelTask);
						break;
					case 3: //腾讯云
						that.tx_oss(file, oss_data, success, progress, cancelTask);
						break;
					default:
						break;
				}
			} else {
				uni.showToast({
					title: ret.msg,
					icon: 'none'
				})
			}

		})
	},

	//阿里云上传
	aliyun_oss(file, oss_data, success, progress, cancelTask) {
		let that =this
		var token = oss_data.token;
		var url = oss_data.url;
		var filename = oss_data.filename;
		let formData = {
			'key': filename,
			'policy': oss_data.policy,
			'OSSAccessKeyId': oss_data.accessid,
			'success_action_status': '200',
			'x-oss-forbid-overwrite': 'true',
			'signature': oss_data.signature,
		}
		if (oss_data.callback) {
			formData['callback'] = oss_data.callback
		}



		var uploadTask = uni.uploadFile({
			url: url,
			filePath: file.filepath,
			name: 'file',
			formData: formData,
			// fileType:'image',
			// header: {
			// 	'Content-Type': 'multipart/form-data'
			// },
			// header: {
			// 	'Content-Type': 'image/jpeg'
			// },

			success: function(res) {


				if (res.statusCode == 200) {
					var dataObject = {};
					dataObject.imageURL = filename;
					 that.up_url(formData, dataObject, success);
					// success(dataObject);
				} else {

					uni.showToast({
						title: '上传失败',
						icon: 'error',
						duration: 5000,
					})
				}

			},
			fail: function(error) {
				uni.showToast({
					title: '阿里云oss通信失败，可能存在跨域问题',
					icon: 'error',
					duration: 5000,
				})
			}
		})
		uploadTask.onProgressUpdate((res) => {

			progress && progress(res)
		})
		cancelTask && cancelTask(() => {
			uploadTask.abort()
		})
	},
	//七牛云上传
	qiniu_oss(file, oss_data, success, progress, cancelTask) {

		let that = this;
		var token = oss_data.token;
		var url = oss_data.url;
		var filename = oss_data.filename;
		let formData = {
			token: token,
			key: filename,
		}

		var uploadTask = uni.uploadFile({
			url: url,
			filePath: file.filepath,
			name: 'file',
			formData: formData,
			success: function(res) {
				if (res.statusCode == 200) {
					var dataObject = {};
					dataObject.imageURL = filename;

					that.up_url(oss_data, dataObject, success);
					// success(dataObject);
				} else {
					var ret = JSON.parse(res.data)

					uni.showToast({
						title: ret.error,
						icon: 'none',
						duration: 8000,
					})
				}

			},
			fail: function(error) {
				uni.showToast({
					title: '七牛云通信失败，可能存在跨域问题',
					icon: 'error',
					duration: 5000,
				})
			}
		})
		uploadTask.onProgressUpdate((res) => {
			progress && progress(res)
		})
		cancelTask && cancelTask(() => {
			uploadTask.abort()
		})
	},


	isString(str) {
		return typeof str === 'string';
	},
	//本地上传
	fileUpload(file, oss_data, success, video_info, Extension, progress, cancelTask) {
		let that = this
		var token = oss_data.token;
		let data = {
			img_token: token,
			banmi_Extension: Extension,
			banmi_video_info: JSON.stringify(video_info)

		}
		var formData = $H.get_data(data);
		formData.banmi_token = video_info.token ? video_info.token : uni.getStorageSync('token');
		formData.group_id = this.group_id;
		formData.t_type = this.t_type;
		// this.group_id
		// this.t_type
		console.log(": " + JSON.stringify(this.group_id));
		console.log(": " + JSON.stringify(this.t_type));
		console.log("formData: " + JSON.stringify(formData));

		var url = $C.baseUrl + '/admin.upload/upload'

		var uploadTask = uni.uploadFile({
			url: url,
			filePath: file.filepath,
			name: 'file',
			formData: formData,
			success: function(res) {


				if (that.isString(res.data)) {
					var ret = JSON.parse(res.data);
				} else {
					var ret = res.data;
				}

				if (ret.status == 200) {
					var dataObject = {};
					dataObject.imageURL = ret.data.url;
					success(dataObject);
					return
				}
				uni.showToast({
					title: ret.msg,
					icon: 'none'
				})
			},
			fail: function(error) {
				console.log("e: " + JSON.stringify(error));
				uni.showToast({
					title: '通信失败，可能存在跨域问题',
					icon: 'none',
					duration: 5000,
				})
			}
		})

		uploadTask.onProgressUpdate((res) => {

			progress && progress(res)
		})
		cancelTask && cancelTask(() => {
			uploadTask.abort()
		})


	},
	//腾讯云上传
	tx_oss(file, oss_data, success, progress, cancelTask) {
		let that = this;
		var filename = oss_data.filename
		var options = {};
		var data = oss_data;
		var pathname;
		var Key = '';
		options.Pathname = '/';
		options.UseRawKey = '';
		if (options.UseRawKey) {
			pathname = options.Pathname || options.pathname || '/' + Key;
		} else {
			pathname = options.Pathname || options.pathname || Key;
			pathname.indexOf('/') !== 0 && (pathname = '/' + pathname);
		} // ForceSignHost明确传入false才不加入host签名
		var method = 'post'
		var queryParams = {};
		var headers = {
			"Host": oss_data.url
		}
		var formatString = [method, pathname, that.obj2str(queryParams,
				true),
			that.obj2str(headers, true), ''
		].join('\n');


		var now = Math.round(that.getSkewTime(0) / 1000) - 1;
		var exp = now;
		var Expires = undefined;
		if (Expires === undefined) {
			exp += 900; // 签名过期时间为当前 + 900s
		} else {
			exp += Expires * 1 || 0;
		} // 要用到的 Authorization 参数列表
		var KeyTime = '';
		var qSignTime = KeyTime || now + ';' + exp;
		var qKeyTime = KeyTime || now + ';' + exp;
		var qAk = data.credentials.tmpSecretId;

		var qSignAlgorithm = 'sha1';
		var stringToSign = ['sha1', qSignTime, that.sha1(formatString)
			.toString(), ''
		].join(
			'\n');
		var qHeaderList = that.getObjectKeys(headers, true).join(';')
			.toLowerCase();
		var SecretKey = data.credentials.tmpSecretKey;
		var qUrlParamList = that.getObjectKeys(queryParams, true).join(
			';').toLowerCase();
		var signKey = CryptoJS.HmacSHA1(qKeyTime, SecretKey)
			.toString(); // 步骤二：构成 FormatString
		var qSignature = CryptoJS.HmacSHA1(stringToSign, signKey)
			.toString(); // 步骤五：构造 Authorization

		var authorization = ['q-sign-algorithm=' + qSignAlgorithm,
			'q-ak=' + qAk,
			'q-sign-time=' + qSignTime, 'q-key-time=' + qKeyTime,
			'q-header-list=' +
			qHeaderList, 'q-url-param-list=' + qUrlParamList,
			'q-signature=' +
			qSignature
		].join('&');
		var formData = {
			'key': filename,
			'success_action_status': 200,
			'Signature': authorization,
			'x-cos-security-token': data.credentials.sessionToken
		};


		var url = 'https://' + oss_data.bucket + '.cos.' + oss_data.region + '.myqcloud.com/';

		var uploadTask = uni.uploadFile({
			url: url,
			filePath: file.filepath,

			name: 'file', // 这是OSS服务默认的表单字段
			// header: {
			// 	'Content-Type': 'multipart/form-data' // 正确的Content-Type
			// },
			formData: formData,

			success: function(res) {
				var dataObject = {};
				dataObject.imageURL = filename;
					success(dataObject);
				// that.up_url(oss_data, dataObject, success);

			},
			fail: function(error) {
				var ret = JSON.parse(res.data)
				uni.showToast({
					title: '和腾讯云cos通信失败，可能存在跨域问题',
					icon: 'none',
					duration: 8000,
				})
			}
		})
		uploadTask.onProgressUpdate((res) => {
			progress && progress(res)
		})
		cancelTask && cancelTask(() => {
			uploadTask.abort()
		})
	},
	up_url(formData, dataObject, success) {



		let that = this;
		var url = '/admin.Upload/oss_img'
		$H.post(url, {
			t_type: that.t_type,
			imageURL: dataObject.imageURL,
			width: that.video_info1.videoWidth,
			height: that.video_info1.videoHeight,
			duration: that.video_info1.duration,
			group_id: that.group_id,
			imageName: that.video_info1.name,
		}).then(ret => {
			success(dataObject);
		})

	},
	//腾讯
	tx_ok_oss(filename) {
		var param = new FormData();
		param.append("attachment", filename);
		var url = '/banmi.php/upload/tx_CallbackURL'
		
		$H.post(url, param).then(ret => {
			 
		})
		
		// $.ajax({
		// 	url: url,
		// 	type: 'post',
		// 	data: param,
		// 	cache: false,
		// 	processData: false,
		// 	contentType: false,
		// 	success: function(data) {

		// 	}
		// })

	},



	//获取文件后缀
	Image_processing(file) {
		let suffix = '';
		return new Promise((resolve, reject) => {
			suffix = this.getExtensionFromBase64(file);
			if (suffix) {
				var find = {
					size: 0,
					type: '',
					suffix: suffix,
				}
				resolve(find);
				return
			}

			// #ifdef H5
			const xhr = new XMLHttpRequest();
			xhr.open('GET', file);
			xhr.responseType = 'blob';
			xhr.onload = () => {
				var blob = xhr.response;

				suffix = blob.type.split('/').pop(); // 获取文件的后缀   
				var find = {
					size: blob.size,
					type: blob.type,
					suffix: suffix,
				}
				resolve(find);
				return
			};
			xhr.send();
			// #endif 
			// #ifndef H5
			suffix = file.substr(file.lastIndexOf("."));
			suffix = suffix.replace(".", "");
			var find = {
				size: 0,
				type: '',
				suffix: suffix,
			}
			resolve(find);
			// #endif





		});



	},

	/**
	 * 从base64编码的图片中获取扩展名
	 * @param {String} base64 
	 * @returns 
	 */
	getExtensionFromBase64(base64) {
		let re = new RegExp('data:image/(?<ext>.*?);base64,.*')
		let res = re.exec(base64)
		if (res) {
			return res.groups.ext
		}
	},
	/**
	 * base64图片大小
	 * @param {string} str 
	 */
	getImgSize(str) {
		// 带上前缀时需去掉前缀
		// str = str.replace('data:image/png;base64,', '');
		if (str instanceof String) {
			var strLength = str.length;
			var fileLength = parseInt(strLength - (strLength / 8) * 2);

			// 由字节转换为KB
			var size = "";
			size = (fileLength / 1024).toFixed(2);
			// 由字节转换为MB
			size = (fileLength / 1024 * 1024).toFixed(2);

			return parseInt(size);
		}
		return parseInt(0);
	},



	obj2str(obj, lowerCaseKey) {
		var i, key, val;
		var list = [];
		var keyList = this.getObjectKeys(obj);

		for (i = 0; i < keyList.length; i++) {
			key = keyList[i];
			val = obj[key] === undefined || obj[key] === null ? '' : '' + obj[key];
			key = lowerCaseKey ? this.camSafeUrlEncode(key).toLowerCase() : this.camSafeUrlEncode(key);
			val = this.camSafeUrlEncode(val) || '';
			list.push(key + '=' + val);
		}
		return list.join('&');
	},

	getObjectKeys(obj, forKey) {
		var list = [];
		for (var key in obj) {
			if (obj.hasOwnProperty(key)) {
				list.push(forKey ? this.camSafeUrlEncode(key).toLowerCase() : key);
			}
		}
		return list.sort(function(a, b) {
			a = a.toLowerCase();
			b = b.toLowerCase();
			return a === b ? 0 : a > b ? 1 : -1;
		});
	},

	camSafeUrlEncode(str) {
		return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(
			/\)/g,
			'%29').replace(/\*/g, '%2A');
	},

	getSkewTime(offset) {
		return Date.now() + (offset || 0);
	},
	// 字符串加密成 hex 字符串
	sha1(s) {
		var data = new Uint8Array(this.encodeUTF8(s))
		var i, j, t;
		var l = ((data.length + 8) >>> 6 << 4) + 16,
			s = new Uint8Array(l << 2);
		s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
		for (t = new DataView(s.buffer), i = 0; i < l; i++) s[i] = t.getUint32(i << 2);
		s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
		s[l - 1] = data.length << 3;
		var w = [],
			f = [
				function() {
					return m[1] & m[2] | ~m[1] & m[3];
				},
				function() {
					return m[1] ^ m[2] ^ m[3];
				},
				function() {
					return m[1] & m[2] | m[1] & m[3] | m[2] & m[3];
				},
				function() {
					return m[1] ^ m[2] ^ m[3];
				}
			],
			rol = function(n, c) {
				return n << c | n >>> (32 - c);
			},
			k = [1518500249, 1859775393, -1894007588, -899497514],
			m = [1732584193, -271733879, null, null, -1009589776];
		m[2] = ~m[0], m[3] = ~m[1];
		for (i = 0; i < s.length; i += 16) {
			var o = m.slice(0);
			for (j = 0; j < 80; j++)
				w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
				t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
				m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
			for (j = 0; j < 5; j++) m[j] = m[j] + o[j] | 0;
		};
		t = new DataView(new Uint32Array(m).buffer);
		for (var i = 0; i < 5; i++) m[i] = t.getUint32(i << 2);

		var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function(e) {
			return (e < 16 ? "0" : "") + e.toString(16);
		}).join("");

		return hex;
	},

	encodeUTF8(s) {
		var i, r = [],
			c, x;
		for (i = 0; i < s.length; i++)
			if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
			else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
		else {
			if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
				c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
				r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
			else r.push(0xE0 + (c >> 12 & 0xF));
			r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
		};
		return r;
	},







}